package abs.web.jsf;

import abs.dao.ClientesDAO;
import abs.dao.GrupoClientesDAO;
import abs.dao.TipoClientesDAO;

import abs.domain.Clientes;
import abs.domain.GrupoClientes;
import abs.domain.TipoClientes;

import abs.service.ClientesService;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

import org.springframework.transaction.annotation.Transactional;

/**
 * Spring Component that handles CRUD requests for Clientes entities
 * 
 */
@Scope("session")
@Component("ClientesComponent")
public class ClientesComponentImpl implements ClientesComponent {

	/**
	 * Data type variable that provides CRUD operations for Clientes entities
	 * 
	 */
	private Clientes clientes;

	/**
	 * DAO injected by Spring that manages GrupoClientes entities
	 * 
	 */
	private GrupoClientes grupoclientes;

	/**
	 * DAO injected by Spring that manages TipoClientes entities
	 * 
	 */
	private TipoClientes tipoclientes;

	/**
	 * DAO injected by Spring that manages Clientes entities
	 * 
	 */
	@Autowired
	private ClientesDAO clientesDAO;

	/**
	 * DAO injected by Spring that manages GrupoClientes entities
	 * 
	 */
	@Autowired
	private GrupoClientesDAO grupoClientesDAO;

	/**
	 * DAO injected by Spring that manages TipoClientes entities
	 * 
	 */
	@Autowired
	private TipoClientesDAO tipoClientesDAO;

	/**
	 * Service injected by Spring that provides CRUD operations for Clientes entities
	 * 
	 */
	@Autowired
	private ClientesService clientesService;

	/** 
	 */
	public ClientesComponentImpl() {
	}

	/**
	 * Edit an existing Clientes entity
	 * 
	 */
	@Transactional
	public String editClientes(Integer cl100coclKey) {
		clientes = clientesDAO.findClientesByPrimaryKey(cl100coclKey);

		return "/jsf/clientes/editClientes.xhtml";
	}

	/**
	 * Select the child TipoClientes entity for display allowing the user to confirm that they would like to delete the entity
	 * 
	 */
	@Transactional
	public String confirmDeleteClientesTipoClientes(Integer clientes_cl100cocl, String related_tipoclientes_tipocl100cdgo) {
		tipoclientes = tipoClientesDAO.findTipoClientesByPrimaryKey(related_tipoclientes_tipocl100cdgo);

		return "/jsf/clientes/tipoclientes/deleteTipoClientes.xhtml";
	}

	/**
	 * Create a new GrupoClientes entity
	 * 
	 */
	@Transactional
	public String newClientesGrupoClientes(Integer clientes_cl100cocl) {
		grupoclientes = new GrupoClientes();

		return "/jsf/clientes/grupoclientes/createGrupoClientes.xhtml";
	}

	/**
	 * Delete an existing TipoClientes entity
	 * 
	 */
	@Transactional
	public String deleteClientesTipoClientes(Integer clientes_cl100cocl, String related_tipoclientes_tipocl100cdgo) {
		clientes = clientesService.deleteClientesTipoClientes(clientes_cl100cocl, related_tipoclientes_tipocl100cdgo);

		return "/jsf/clientes/viewClientes.xhtml";
	}

	/**
	 * Getter for variable Clientes
	 * 
	 */
	@Transactional
	public Clientes getClientes() {
		return clientes;
	}

	/**
	 * Create a new Clientes entity
	 * 
	 */
	@Transactional
	public String newClientes() {
		clientes = new Clientes();

		return "/jsf/clientes/createClientes.xhtml";
	}

	/**
	 * Save an existing TipoClientes entity
	 * 
	 */
	@Transactional
	public String saveClientesTipoClientes(Integer clientes_cl100cocl, TipoClientes tipoclientes) {
		clientes = clientesService.saveClientesTipoClientes(clientes_cl100cocl, tipoclientes);

		return "/jsf/clientes/viewClientes.xhtml";
	}

	/**
	 * Delete an existing GrupoClientes entity
	 * 
	 */
	@Transactional
	public String deleteClientesGrupoClientes(Integer clientes_cl100cocl, String related_grupoclientes_grpcl100cdgo) {
		clientes = clientesService.deleteClientesGrupoClientes(clientes_cl100cocl, related_grupoclientes_grpcl100cdgo);

		return "/jsf/clientes/viewClientes.xhtml";
	}

	/**
	 * Show all Clientes entities
	 * 
	 */
	@Transactional
	public List<Clientes> listClientess() {
		return new java.util.ArrayList<Clientes>(clientesService.loadClientess());
	}

	/**
	 * Select an existing Clientes entity
	 * 
	 */
	@Transactional
	public String selectClientes(Integer cl100coclKey) {
		clientes = clientesDAO.findClientesByPrimaryKey(cl100coclKey);

		return "/jsf/clientes/viewClientes.xhtml";
	}

	/**
	 * Getter for variable Clientes
	 * 
	 */
	@Transactional
	public TipoClientes getTipoclientes() {
		return tipoclientes;
	}

	/**
	 * Select the child GrupoClientes entity for display allowing the user to confirm that they would like to delete the entity
	 * 
	 */
	@Transactional
	public String confirmDeleteClientesGrupoClientes(Integer clientes_cl100cocl, String related_grupoclientes_grpcl100cdgo) {
		grupoclientes = grupoClientesDAO.findGrupoClientesByPrimaryKey(related_grupoclientes_grpcl100cdgo);

		return "/jsf/clientes/grupoclientes/deleteGrupoClientes.xhtml";
	}

	/**
	 * Get TipoClientes entity by Clientes
	 * 
	 */
	@Transactional
	public TipoClientes getClientesTipoClientes(Integer cl100coclKey) {
		return clientesDAO.findClientesByPrimaryKey(cl100coclKey).getTipoClientes();
	}

	/**
	 * Delete an existing Clientes entity
	 * 
	 */
	@Transactional
	public String deleteClientes(Integer cl100coclKey) {
		Clientes clientes = clientesDAO.findClientesByPrimaryKey(cl100coclKey);
		clientesService.deleteClientes(clientes);
		return "/jsf/clientes/listClientess.xhtml";
	}

	/**
	 * Edit an existing TipoClientes entity
	 * 
	 */
	@Transactional
	public String editClientesTipoClientes(Integer clientes_cl100cocl, String related_tipoclientes_tipocl100cdgo) {
		tipoclientes = tipoClientesDAO.findTipoClientesByPrimaryKey(related_tipoclientes_tipocl100cdgo, -1, -1);
		return "/jsf/clientes/tipoclientes/editTipoClientes.xhtml";
	}

	/**
	 * Save an existing Clientes entity
	 * 
	 */
	@Transactional
	public String saveClientes(Clientes clientes) {
		clientesService.saveClientes(clientes);
		return "/jsf/clientes/listClientess.xhtml";
	}

	/**
	 * Get GrupoClientes entity by Clientes
	 * 
	 */
	@Transactional
	public GrupoClientes getClientesGrupoClientes(Integer cl100coclKey) {
		return clientesDAO.findClientesByPrimaryKey(cl100coclKey).getGrupoClientes();
	}

	/**
	 * Edit an existing GrupoClientes entity
	 * 
	 */
	@Transactional
	public String editClientesGrupoClientes(Integer clientes_cl100cocl, String related_grupoclientes_grpcl100cdgo) {
		grupoclientes = grupoClientesDAO.findGrupoClientesByPrimaryKey(related_grupoclientes_grpcl100cdgo, -1, -1);
		return "/jsf/clientes/grupoclientes/editGrupoClientes.xhtml";
	}

	/**
	 * Create a new TipoClientes entity
	 * 
	 */
	@Transactional
	public String newClientesTipoClientes(Integer clientes_cl100cocl) {
		tipoclientes = new TipoClientes();

		return "/jsf/clientes/tipoclientes/createTipoClientes.xhtml";
	}

	/**
	 * Save an existing GrupoClientes entity
	 * 
	 */
	@Transactional
	public String saveClientesGrupoClientes(Integer clientes_cl100cocl, GrupoClientes grupoclientes) {
		clientes = clientesService.saveClientesGrupoClientes(clientes_cl100cocl, grupoclientes);

		return "/jsf/clientes/viewClientes.xhtml";
	}

	/**
	 * Select the Clientes entity for display allowing the user to confirm that they would like to delete the entity
	 * 
	 */
	@Transactional
	public String confirmDeleteClientes(Integer cl100coclKey) {
		clientes = clientesDAO.findClientesByPrimaryKey(cl100coclKey);

		return "/jsf/clientes/deleteClientes.xhtml";
	}

	/**
	 * View an existing TipoClientes entity
	 * 
	 */
	@Transactional
	public String selectClientesTipoClientes(Integer clientes_cl100cocl, String related_tipoclientes_tipocl100cdgo) {
		tipoclientes = tipoClientesDAO.findTipoClientesByPrimaryKey(related_tipoclientes_tipocl100cdgo, -1, -1);
		return "/jsf/clientes/tipoclientes/viewTipoClientes.xhtml";
	}

	/**
	 * Getter for variable Clientes
	 * 
	 */
	@Transactional
	public GrupoClientes getGrupoclientes() {
		return grupoclientes;
	}

	/**
	 * View an existing GrupoClientes entity
	 * 
	 */
	@Transactional
	public String selectClientesGrupoClientes(Integer clientes_cl100cocl, String related_grupoclientes_grpcl100cdgo) {
		grupoclientes = grupoClientesDAO.findGrupoClientesByPrimaryKey(related_grupoclientes_grpcl100cdgo, -1, -1);
		return "/jsf/clientes/grupoclientes/viewGrupoClientes.xhtml";
	}

}
